package de.koller.worlders.engine.entity.plattform;

import de.koller.oceanFramework.math.Vec;
import de.koller.worlders.engine.entity.mo.MovingObject;
import de.koller.worlders.engine.tiles.ITile;
import de.koller.worlders.engine.tiles.data.ITileCreator;
import de.koller.worlders.render.VisualMap;
import de.koller.worlders.render.visual.DisplayRenderObject;

public class Catapult extends PlattformEffect {
	public static final int GEN_ID = 10;
	
	public static final ITileCreator GEN_INSTANCE = new ITileCreator() {
	@Override public ITile newInstance() {
			return new Plattform().addEffect( new Catapult() );
		}
	
		@Override public DisplayRenderObject getIcon() { return VisualMap.catapult; }
		@Override public String getName() { return "Schleuder"; }
	};
	
	private final double strength = 0.01982;
	
	@Override
	public void init( Plattform p ) {
		super.init( p );
		
//		p.setTextureRep( new TextureRep( "data/tiles.png", 416, 0, 32, 32 ) );
		p.getTile().setVisual( VisualMap.catapult );
	}

	@Override
	public void collision( Vec wayBefore, Vec wayAfter, MovingObject mo ) {
		super.collision( wayBefore, wayAfter, mo );

		if( plattform.isAbove( mo ) ) {
			mo.getEnergy().setY( -strength );
			wayAfter.setY( 0 );
		} else if( plattform.isBelow( mo ) ) {
			mo.getEnergy().setY( strength );
			wayAfter.setY( 0 );
		}
		
		if( plattform.isLeft( mo ) || plattform.isRight( mo ) )
			wayAfter.setX( 0 );
		
		final double c = 0.001;
		//@todo achtung positionset!
		if( plattform.isAbove( mo ) )
			mo.getPosition().setY( plattform.getPosition().getY() - mo.getSize().getY() - c );
		if( plattform.isBelow( mo ) )
			mo.getPosition().setY( plattform.getPosition().getY() + plattform.getSize().getY() + c );
		if( plattform.isLeft( mo ) )
			mo.getPosition().setX( plattform.getPosition().getX() - mo.getSize().getX() - c );
		if( plattform.isRight( mo ) )
			mo.getPosition().setX( plattform.getPosition().getX() + plattform.getSize().getX() + c );
	}

}
